package br.com.keropizza.controller;

import java.util.List;

import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

import br.com.keropizza.dao.ClienteDao;
import br.com.keropizza.dominio.Cliente;
import br.com.keropizza.dominio.Endereco;

/**
 * @author fabio
 *
 */
@Transactional
@Controller
public class ClienteController {

	@Autowired
	private ClienteDao clienteDao;

	@RequestMapping("/")
	public String homePage() {
		return "inicio";
	}

	@RequestMapping("inicio")
	public String mostraEndereco(Model model) {
		model.addAttribute("inicio", true);
		return "inicio";
	}

	@RequestMapping("buscaCliente")
	public String mostraCliente(String telefone, Model model) {
		Cliente cliente = clienteDao.buscaPorTelefone(telefone);
		model.addAttribute("cliente", cliente);
		model.addAttribute("inicio", true);
		return "inicio";
	}

	@RequestMapping("novoCliente")
	public String novoCliente(Model model) {
		model.addAttribute("menuCadastroCliente", true);
		return "cliente/adiciona-cliente";
	}

	@RequestMapping("adicionaCliente")
	public String adicionaCliente(@Valid Cliente cliente, BindingResult result,
			@Valid Endereco endereco, BindingResult resultEndereco,
			Model model) {
		if (result.hasErrors() || resultEndereco.hasErrors()) {
			return "adiciona-cliente";
		}
		cliente.adicionaEndereco(endereco);
		clienteDao.adiciona(cliente);
		model.addAttribute("clienteSalvo", cliente);
		model.addAttribute("menuCadastroCliente", true);
		return "cliente/adiciona-cliente";
	}

	@RequestMapping("listaClientes")
	public String listaClientes(Model model) {
		List<Cliente> clientes = clienteDao.buscaTodosClientes();
		model.addAttribute("clientes", clientes);
		model.addAttribute("menuListaCliente", true);
		return "cliente/lista-cliente";
	}

	@RequestMapping("mostraCliente")
	public String mostraCliente(Long id, Model model) {
		Cliente cliente = clienteDao.buscaPorId(id);
		model.addAttribute("cliente", cliente);
		model.addAttribute("endereco", cliente.getEnderecos().get(0));
		model.addAttribute("menuListaCliente", true);
		return "cliente/mostra-cliente";
	}

	@RequestMapping("alteraCliente")
	public String alteraCliente(@Valid Cliente cliente, BindingResult result,
			@Valid Endereco endereco, BindingResult resultEndereco,
			Model model) {
		if (result.hasErrors() || resultEndereco.hasErrors()) {
			return "cliente/mostra-cliente";
		}
		cliente.adicionaEndereco(endereco);
		clienteDao.altera(cliente);
		model.addAttribute("clienteAlterado", cliente);
		return "redirect:listaClientes";
	}

	@RequestMapping("removeCliente")
	public String removeCliente(Cliente cliente) {
		clienteDao.remove(cliente);
		return "redirect:listaClientes";
	}

}
